home *** CD-ROM | disk | FTP | other *** search
- /*
- * Example of client using UDP protocol.
- */
-
- #include "inet.h"
-
- main(argc, argv)
- int argc;
- char *argv[];
- {
- int tfd;
- struct t_unitdata unitdata;
- struct sockaddr_in serv_addr;
-
- pname = argv[0];
-
- /*
- * Open a UDP endpoint.
- */
-
- if ( (tfd = t_open(DEV_UDP, O_RDWR, (struct t_info *) 0)) < 0)
- err_dump("client: can't t_open %s", DEV_UDP);
-
- /*
- * Bind any local address for us.
- */
-
- if (t_bind(tfd, (struct t_bind *) 0, (struct t_bind *) 0) < 0)
- err_dump("client: t_bind error");
-
- /*
- * Initialize a sockaddr_in structure with the address of the
- * the server we want to send datagrams to.
- */
-
- bzero((char *) &serv_addr, sizeof(serv_addr));
- serv_addr.sin_family = AF_INET;
- serv_addr.sin_addr.s_addr = inet_addr(SERV_HOST_ADDR);
- serv_addr.sin_port = htons(SERV_UDP_PORT);
-
- /*
- * Now initialize a unitdata structure for sending to the server.
- */
-
- unitdata.addr.maxlen = sizeof(serv_addr); /* server's addr */
- unitdata.addr.len = sizeof(serv_addr);
- unitdata.addr.buf = (char *) &serv_addr;
- unitdata.opt.maxlen = 0; /* no options */
- unitdata.opt.len = 0;
- unitdata.opt.buf = (char *) 0;
-
- doit(tfd, &unitdata, stdin); /* do it all */
-
- t_close(tfd);
- exit(0);
- }
-
- /*
- * Read the contents of the FILE *fp, write each line to the transport
- * endpoint (to the server process), then read a line back from
- * the transport endpoint and print it on the standard output.
- */
-
- doit(tfd, sudataptr, fp)
- register int tfd;
- struct t_unitdata *sudataptr; /* unitdata for sends */
- register FILE *fp;
- {
- int n, flags;
- char sendline[MAXLINE], recvline[MAXLINE + 1];
- char *t_alloc();
- struct t_unitdata *rudataptr; /* unitdata for receives */
-
- /*
- * Allocate memory for the t_unitdata structure and the address field
- * in that structure. This allows any size of address to be handled
- * by this function.
- */
-
- rudataptr = (struct t_unitdata *) t_alloc(tfd, T_UNITDATA, T_ADDR);
- if (rudataptr == NULL)
- err_dump("server: t_alloc error for T_UNITDATA");
-
- while (fgets(sendline, MAXLINE, fp) != NULL) {
- n = strlen(sendline);
- sudataptr->udata.len = n;
- sudataptr->udata.buf = sendline;
- if (t_sndudata(tfd, sudataptr) < 0)
- err_dump("client: t_sndudata error");
-
- /*
- * Now read a message from the transport endpoint and
- * write it to our standard output.
- */
-
- rudataptr->opt.maxlen = 0; /* don't care about options */
- rudataptr->udata.maxlen = MAXLINE;
- rudataptr->udata.buf = recvline;
- if (t_rcvudata(tfd, rudataptr, &flags) < 0)
- err_dump("client: t_rcvudata error");
- recvline[rudataptr->udata.len] = 0; /* null terminate */
- fputs(recvline, stdout);
- }
-
- if (ferror(fp))
- err_dump("client: error reading file");
- }
-